﻿using System;

namespace Core.Guide
{
    /// <summary>
    /// 导航器管理器类，用于管理多个导航器的切换和生命周期。
    /// </summary>
    public class GuideSystem
    {
        private readonly IGuide[] _guides;

        // 当前活动的导航器
        private IGuide _currentGuide;

        public GuideSystem(IGuide[] guides)
        {
            _guides = guides;
        }

        public void ChangeTo<T>() where T : IGuide
        {
            IGuide guide = Array.Find(_guides, x => x.GetType() == typeof(T));
            if (guide == null)
            {
                throw new InvalidOperationException($"没有找到类型为 {typeof(T)} 的导航器。");
            }

            if (_currentGuide == guide)
                return;
            // 退出当前导航器
            _currentGuide?.Exit();
            // 更新当前导航器并进入新导航器
            _currentGuide = guide;
            _currentGuide.Enter();
        }
    }
}